﻿using _17bang.Entities;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace _17bang.Repositories
{
    public class ArticleRepository
    {
        private static IList<Article> articles;
        private static IList<Keyword> keywords;
        private static IList<SeriesArticles> seriesArticles;
        private static IList<SeriesArticles> seriesarticles;
        private static IList<Tabs> tabs;

        public int ArticleCounts { get; set; }
        public ArticleRepository()
        {
            ArticleCounts = articles.Count();
        }
        static ArticleRepository()
        {
            tabs = new List<Tabs>
            {
                new Tabs{Title = "共扫描目标：",Body = "9个"},
                new Tabs{Title = "当天休息：",Body = "1人"},
                new Tabs{Title = "已交作业：",Body = "5份"},
                new Tabs{Title = "请假：",Body = "2人"},
                new Tabs{Title = "未交作业：",Body = "1人"},
            };
            seriesarticles = new List<SeriesArticles>
            {
                new SeriesArticles{Title = "其他",Content = "一些和课程和编程相关，不宜放在培训系列中一些随想杂谈……",Id = 2},
                new SeriesArticles{Title = "编程基础",Content = "计算机编程普及课程，适合入门纯小白打好基础，以及野生程序员补足内功",Id = 13},
                new SeriesArticles{Title = "Web前端",Content = "HTML、CSS和JavaScript，以及类库Bootstrap/JQuery/Vue等",Id = 71},
                new SeriesArticles{Title = "后台开发",Content = "Web开发常用的后台技术，包括所使用的语言（Java/C#）、Web框架（ASP.NET/Strut/Spring）以及ORM工具（EntityFramework/mybatis）等",Id = 93},
                new SeriesArticles{Title = "数据库",Content = "",Id = 99},

            };
            seriesArticles = new List<SeriesArticles>
            {
                new SeriesArticles{Title = "源栈培训：ASP.NET全栈开发",Content = "飞哥的源栈培训：线上全程直播，免费收看；线下拎包入住，按周计费。本系列收录所有讲义（含视频录播地址）",Id = 1},
                new SeriesArticles{Title = "未分类",Content = "系统自动生成的未分类系列",Id = 9},
                new SeriesArticles{Title = "一锅大杂烩",Content = "从律师到包工头，从码农到写手，读书交友生活创业，各种零零碎碎，乱七八糟……",Id = 10},
                new SeriesArticles{Title = "折腾",Content = "生命不息，折腾不止。十年青葱岁月，多少辛酸回忆……",Id = 66},
                new SeriesArticles{Title = "周三晚7点",Content = "每周星期三晚上七点，哔哩哔哩飞哥和你聊一聊，聊啥都行！谁让飞哥是：黑律师/包工头/老码农/创业狗和段子手……呢，^_^",Id = 78},
                new SeriesArticles{Title = "垃圾桶",Content = "",Id = 103},
                new SeriesArticles{Title = "学前学后",Content = "要不要、能不能、怎么学编程？以及学了之后如何制作、投递简历、面试、职场发展等系列问题",Id = 110},
            };
            keywords = new List<Keyword>
            {
                new Keyword{Name="编程开发",Number ="242",},
                new Keyword{Name = "C#",Number = "97"},
                new Keyword{Name = "JAVA",Number = "71"},
                new Keyword{Name = "工具软件",Number = "68"},
                new Keyword{Name = "JavaScript",Number = "55"},
                new Keyword{Name = "顾问咨询",Number = "32"},
                new Keyword{Name = "html",Number = "25"},
                new Keyword{Name = "VisualStudio",Number = "24"},
                new Keyword{Name = "操作系统",Number = "19"},
                new Keyword{Name = "职场",Number = "18"},
                new Keyword{Name = "Python",Number = "18"},
                new Keyword{Name = "falv",Number = "18"},
                new Keyword{Name = "SQL",Number = "14"},
                new Keyword{Name = ".net",Number = "14"},
                new Keyword{Name = "css",Number = "13"},
                new Keyword{Name = "Linux",Number = "12"},
            };

            articles = new List<Article>
            {
                new Article
                {
                    Id = 846,
                    Title = @"快快乐乐的吹个水：梦想还是要有的",
                    Body = @"最直接最打脸的办法：【野生程序员】：优先招聘 你觉得那些看学历的公司是傻缺，你不傻，那你来办一个不看学历的公司呀？
                    你觉得那些不要35岁老码农的公司是傻缺，你不傻，那你来办一个不看年龄的公司呀？叽叽歪歪说那么多干嘛？
                    你有创业的经历你有十年的行业经历你还有影响力把这个公司做成功，不要太成功，给所有野生程序猿一口饭吃，一口不太差的饭吃没有面试机会？骗HR不骗TechLeader。
                    更多内容不宜公开。 PS：某乎上面某培训机构：收学生都至少要大专学历，飞哥不要！昨天和同学聊天，最大的成就感不来自那些本来就非常优秀 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,3,14,21,59,13),
                    Keywords = new List<Keyword>
                    {
                        new Keyword { Name="梦想"},
                        new Keyword { Name="源栈"},
                        new Keyword { Name="飞哥"},
                    },
                    Comments = new Comment
                    {
                       CommentCount = 0
                    },
                    Appraise = new Appraise
                    {
                        AgreeAmount = 3,
                        DisagreeAmount = 1
                    }
                },
                new Article
                {
                    Id = 845,
                    Title = @"我有一个梦想：助力职业自由！（制作中……）",
                    Body = @"最直接最打脸的办法：【野生程序员】：优先招聘 你觉得那些看学历的公司是傻缺，你不傻，那你来办一个不看学历的公司呀？你觉得那些不要35岁老码农的公司是傻缺，
                    你不傻，那你来办一个不看年龄的公司呀？叽叽歪歪说那么多干嘛？你有创业的经历你有十年的行业经历你还有影响力把这个公司做成功，不要太成功，
                    给所有野生程序猿一口饭吃，一口不太差的饭吃没有面试机会？骗HR不骗TechLeader。 更多内容不宜公开。 PS：某乎上面某培训机构：收学生都至少要大专学历，飞哥不要！
                    昨天和同学聊天，最大的成就感不来自那些本来就非常优秀 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,3,12,13,14,20),
                    Keywords = new List<Keyword>
                    {
                        new Keyword { Name="梦想"},
                        new Keyword { Name="源栈"},
                        new Keyword { Name="飞哥"},
                    },
                    Comments = new Comment
                    {
                       CommentCount = 0
                    },
                    Appraise = new Appraise
                    {
                        AgreeAmount = 3,
                        DisagreeAmount = 1
                    }
                },
               new Article
                {
                    Id = 844,
                    Title = @"学校不会教你的那些事",
                    Body = @"程序员的职业，前期靠技术，后期靠什么？技术以外的东西，除了命运，我们姑且将其称之为“情商”吧——为人处世之道。但我对很多源栈同学的情商，深表忧虑啊！
                    飞哥看了只摇头的那种……怎么会这样？然后就想到：他们还是孩子啊（飞哥 => 飞叔），然后就想到自己孩子，头疼得一逼……这就是所谓的“家教”：学校不教的。
                    学校不教，飞哥教。其实我的情商也低，不然不会做码农做得这么开心，而是应该做律师那份有前途的职业，^_^，随意，“教”改成“交”，相互交流时间观念 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,3,1,8,30,45),
                     Keywords = new List<Keyword>
                    {
                        new Keyword { Name="为人处世"},
                        new Keyword { Name="做人"},
                        new Keyword { Name="情商"},
                    },
                    Comments = new Comment
                    {
                       CommentCount = 2
                    },
                    Appraise = new Appraise
                    {
                        AgreeAmount = 1,
                        DisagreeAmount = 0
                    }
                },
              new Article
                {
                    Id = 843,
                    Title = @"出栈之后：简历/面试/陷阱",
                    Body = @"为什么不理我了？你太优秀了，我配不上你。这是一种非常“吃亏”的“好学生”思维。有没有发现：有时候，好学生、漂亮女孩更“自卑”？
                    自我要求更高，更害怕被拒绝、更害怕失败……简历先投！没有面试机会？骗HR不骗TechLeader。 更多内容不宜公开。
                    PS：某乎上面某培训机构：收学生都至少要大专学历，飞哥不要！昨天和同学聊天，最大的成就感不来自那些本来就非常优秀的同学，
                    而是来自那些天赋不高、自身条件不够，但通过不懈的努力，扼住了命运的咽喉，改变自己命运的人！ 我考上了清华，和你老师有什么关系？ 梦想还是要有的最 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,2,24,10,07,08),
                     Keywords = new List<Keyword>
                    {
                        new Keyword { Name="简历"},
                        new Keyword { Name="求职"},
                        new Keyword { Name="面试"},
                    },
                     Comments = new Comment
                    {
                       CommentCount = 0
                    },
                     Appraise = new Appraise
                    {
                        AgreeAmount = 1,
                        DisagreeAmount = 0
                    }
                },
              new Article
                {
                    Id = 842,
                    Title = @"学什么？编程语言 / 软硬件 / 软件工程 / 信息化应用 / Web开发 / 前端&后端 / 时髦技术",
                    Body = @"提醒：合集形式，注意订阅首先，你不是学语言飞哥，你那里教什么？Java，python，C++……这些都是编程“语言”，你可以理解成和计算机交流的一系列的语法“规则”集合，
                    不同的语言有不同的语法规则（演示） 以语法为导向，必然带来这么个问题：记不住：把学习当做一种“背诵/记忆”，所以学了后面的忘了前面的抓不住重点：纠缠/窃喜于一些生僻的、晦涩的、根本不常用的语法，
                    茴香豆的茴字有几种写法？尤其是一些比较垃圾的语言（点名JavaScript）迷茫：学完了所有语法，也不知道能干嘛，做个网站，游戏，还是APP？都不 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,2,14,11,11,11),
                    Keywords = new List<Keyword>
                    {
                        new Keyword { Name="编程"},
                        new Keyword { Name="语言"},
                        new Keyword { Name="前后端"},
                    },
                     Comments = new Comment
                    {
                       CommentCount = 0
                    },
                     Appraise = new Appraise
                    {
                        AgreeAmount = 1,
                        DisagreeAmount = 0
                    }
                },
              new Article
                {
                    Id = 841,
                    Title = @"程序员晋级之路：入职 / 转正 / 升职&加薪&跳槽 / 天花板 / 转向 /合伙&创业",
                    Body = @"不建议：死啃经典/大部头不建议：死啃经典/大部头不建议：死啃经典/大部头不建议：死啃经典/大部头 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,2,2,18,47,13),
                     Keywords = new List<Keyword>
                    {
                        new Keyword { Name="学编程"},
                        new Keyword { Name="学习内容"},
                    },
                     Comments = new Comment
                    {
                       CommentCount = 0
                    },
                     Appraise = new Appraise
                    {
                        AgreeAmount = 0,
                        DisagreeAmount = 0
                    }
                },
              new Article
                {
                    Id = 840,
                    Title = @"转行学编程，怎么学？：知识&能力 / 敲代码 / 作业点评 / 模拟面试 / 英语",
                    Body = @"首先，你不是学语言飞哥，你那里教什么？Java，python，C++……这些都是编程“语言”，你可以理解成和计算机交流的一系列的语法“规则”集合，
                    不同的语言有不同的语法规则（演示）以语法为导向，必然带来这么个问题：记不住：把学习当做一种“背诵/记忆”，所以学了后面的忘了前面的陷得太深：
                    抓不住重点，纠缠/窃喜于一些生僻的、晦涩的、根本不常用的语法，茴香豆的茴字有几种写法？尤其是一些比较垃圾的语言（点名JavaScript）
                    迷茫：学完了所有语法，也不知道能干嘛，做个网站，游戏，还是APP？都不会，甚至方向错误 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,1,25,9,20,10),
                     Keywords = new List<Keyword>
                    {
                        new Keyword { Name="学编程"},
                        new Keyword { Name="怎么学"},
                        new Keyword { Name="学什么"}
                    },
                     Comments = new Comment
                    {
                       CommentCount = 1
                    },
                     Appraise = new Appraise
                    {
                        AgreeAmount = 0,
                        DisagreeAmount = 0
                    }
                },
              new Article
                {
                    Id = 839,
                    Title = @"程序员的35岁中年危机",
                    Body = @"这是一个广为流传的“谣言”？甚至还有记者专门采访过我（在中国，有多少程序员干到40了？那么其他人去干什么了？），可能没有得到想要的答案，
                    也没了后续……先做个科普简化版：程序员干到35岁就会被裁掉……为什么呢？年龄大了：家庭拖累，不加班干活划水学东西慢，不如年轻人工资高，
                    对企业来说性价比低…… 实证：各个大厂流传出来的“新闻”，最早应该是华为 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,1,16,11,59,13),
                     Keywords = new List<Keyword>
                    {
                        new Keyword { Name="程序员"},
                        new Keyword { Name="35岁"},
                        new Keyword { Name="中年危机"},
                    },
                     Comments = new Comment
                    {
                       CommentCount = 0
                    },
                     Appraise = new Appraise
                    {
                        AgreeAmount = 4,
                        DisagreeAmount = 0
                    }
                },
             new Article
                {
                    Id = 838,
                    Title = @"2022新【合集】：学编程，做程序员，所有问题一次说完！",
                    Body = @"这是一个长视频、慢视频、系列视频、全方位介绍的视频。面对的是焦虑着、彷徨着、痛苦着、真心（不会嫌慢，只会嫌少）想转行做程序员的同学。
                    想快一点的同学：【合集】入行程序员，常见问题快速解答我也尽快，同时欢迎留言。准备要不要转行？结合我的经历谈程序员的工作、学习和生活学习就业提高工资流水凭啥给你我的工资流水？
                    平等的：你先把你们公司的职工工资流水发给我看看，行不？谈判的底牌，我怎么可能给你？气势啊，气势！委婉一点：签了保密协议的我们公司要不要签保密协议？
                    1、不要问我，问我有啥用？善良脸皮薄轻信（相信一些美好的东西 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,1,12,1,12,13),
                    Keywords = new List<Keyword>
                    {
                        new Keyword { Name="学编程"},
                        new Keyword { Name="转行"},
                        new Keyword { Name="程序员"},
                    },
                    Comments = new Comment
                    {
                       CommentCount = 0
                    },
                    Appraise = new Appraise
                    {
                        AgreeAmount = 20,
                        DisagreeAmount = 3
                    }
                },
             new Article
                {
                    Id = 837,
                    Title = @"程序员的工作、学习和生活，岗位职责",
                    Body = @"为什么要“结合我的经历”？要不要转行做程序员？的一部分，这是一个非常非常非常主观的问题。没有科学测评别人没法帮你做决定（延伸：以前我会劝人学编程，现在我都先劝退……）
                    最好的方法是描述、借鉴和体会。简单自我介绍详细：004-来份我的简历：斜杠中年：黑律师包工头老码农，现在是个教书匠 ……",
                    Author = new User
                    {
                        Id = 1,
                        Name = "叶飞"
                    },
                    PublishTime = new DateTime(2022,1,6,23,12,13),
                    Keywords = new List<Keyword>
                    {
                        new Keyword { Name="经历"},
                        new Keyword { Name="转行"},
                        new Keyword { Name="程序员"},
                    },
                    Comments = new Comment
                    {
                       CommentCount = 0
                    },
                    Appraise = new Appraise
                    {
                        AgreeAmount = 0,
                        DisagreeAmount = 0
                    }
                }
            };
        }

        internal IList<Keyword> Get()
        {
            return keywords.ToList();    
        }
        internal IList<SeriesArticles> Find()
        {
            return seriesArticles.ToList();
        }
        internal IList<SeriesArticles> Seek()
        {
            return seriesarticles.ToList();
        }
        internal IList<Tabs> Search()
        {
            return tabs.ToList();
        }
        internal IList<Article> Get(int pageIndex, int pageSize)
        {
            return articles
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize)
                .ToList();
        }

        internal IList<Article> Find(int pageIndex, int category, int pageSize)
        {
            return articles
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize)
                .ToList();
        }

        internal IList<Article> Get(int author, int pageIndex, int pageSize)
        {
            return articles
                .Skip((pageIndex - 1) * pageSize)
                .Take(pageSize)
                .ToList();
        }

    }
}
